import json
import re
from typing import Any

import scrapy
from scrapy.http import Response

from apps.tender_project.tender_project.base.base_project_spider import BaseProjectSpider
from apps.tender_project.tender_project.items import NetProjectInfoItem
from apps.tender_project.tender_project.utils.re_ import XING
from utils.tools import parse_url_params


class QgJiangxiProject(BaseProjectSpider):
    name = 'qg_jiangxi_project'
    source = "江西省全国公共交易平台"
    province = "江西省"

    url = "https://www.jxsggzy.cn/XZinterface/rest/esinteligentsearch/getFullTextDataNew"

    custom_settings = {
        "COOKIES_ENABLED": False
    }

    def start_requests(self):
        city_list = {
            '3600': '江西省', '3601': '南昌市', '3602': '景德镇市', '3603': '萍乡市', '3604': '九江市', '3605': '新余市',
            '3606': '鹰潭市', '3607': '赣州市', '3608': '吉安市', '3609': '宜春市', '3610': '抚州市', '3611': '上饶市',
            '3612': '赣江新区'
        }

        datalist = [{'xiaqu': '省本级', 'itemlevcode': '360001', 'xiaqucode': '360001'},
                    {'xiaqu': '省农垦', 'itemlevcode': '360002', 'xiaqucode': '360002'},
                    {'xiaqu': '南昌市本级', 'itemlevcode': '360101', 'xiaqucode': '360101'},
                    {'xiaqu': '东湖区', 'itemlevcode': '360102', 'xiaqucode': '360102'},
                    {'xiaqu': '西湖区', 'itemlevcode': '360103', 'xiaqucode': '360103'},
                    {'xiaqu': '青云谱区', 'itemlevcode': '360104', 'xiaqucode': '360104'},
                    {'xiaqu': '湾里区', 'itemlevcode': '360105', 'xiaqucode': '360105'},
                    {'xiaqu': '桑海经济技术开发区', 'itemlevcode': '360110', 'xiaqucode': '360110'},
                    {'xiaqu': '青山湖区', 'itemlevcode': '360111', 'xiaqucode': '360111'},
                    {'xiaqu': '南昌县', 'itemlevcode': '360121', 'xiaqucode': '360121'},
                    {'xiaqu': '新建区', 'itemlevcode': '360122', 'xiaqucode': '360122'},
                    {'xiaqu': '安义县', 'itemlevcode': '360123', 'xiaqucode': '360123'},
                    {'xiaqu': '进贤县', 'itemlevcode': '360124', 'xiaqucode': '360124'},
                    {'xiaqu': '高新技术产业开发区', 'itemlevcode': '360125', 'xiaqucode': '360125'},
                    {'xiaqu': '红谷滩新区', 'itemlevcode': '360126', 'xiaqucode': '360126'},
                    {'xiaqu': '经济技术开发区', 'itemlevcode': '360130', 'xiaqucode': '360130'},
                    {'xiaqu': '临空经济区', 'itemlevcode': '360131', 'xiaqucode': '360131'},
                    {'xiaqu': '景德镇市本级', 'itemlevcode': '360201', 'xiaqucode': '360201'},
                    {'xiaqu': '昌江区', 'itemlevcode': '360202', 'xiaqucode': '360202'},
                    {'xiaqu': '珠山区', 'itemlevcode': '360203', 'xiaqucode': '360203'},
                    {'xiaqu': '高新开发区', 'itemlevcode': '360204', 'xiaqucode': '360204'},
                    {'xiaqu': '陶瓷科技园', 'itemlevcode': '360205', 'xiaqucode': '360205'},
                    {'xiaqu': '浮梁县', 'itemlevcode': '360222', 'xiaqucode': '360222'},
                    {'xiaqu': '乐平市', 'itemlevcode': '360281', 'xiaqucode': '360281'},
                    {'xiaqu': '萍乡市本级', 'itemlevcode': '360301', 'xiaqucode': '360301'},
                    {'xiaqu': '安源区', 'itemlevcode': '360302', 'xiaqucode': '360302'},
                    {'xiaqu': '萍乡经济技术开发区', 'itemlevcode': '360303', 'xiaqucode': '360303'},
                    {'xiaqu': '湘东区', 'itemlevcode': '360313', 'xiaqucode': '360313'},
                    {'xiaqu': '莲花县', 'itemlevcode': '360321', 'xiaqucode': '360321'},
                    {'xiaqu': '上栗县', 'itemlevcode': '360322', 'xiaqucode': '360322'},
                    {'xiaqu': '芦溪县', 'itemlevcode': '360323', 'xiaqucode': '360323'},
                    {'xiaqu': '九江市本级', 'itemlevcode': '360401', 'xiaqucode': '360401'},
                    {'xiaqu': '濂溪区', 'itemlevcode': '360402', 'xiaqucode': '360402'},
                    {'xiaqu': '浔阳区', 'itemlevcode': '360403', 'xiaqucode': '360403'},
                    {'xiaqu': '九江经济技术开发区', 'itemlevcode': '360404', 'xiaqucode': '360404'},
                    {'xiaqu': '庐山西海', 'itemlevcode': '360405', 'xiaqucode': '360405'},
                    {'xiaqu': '八里湖新区', 'itemlevcode': '360406', 'xiaqucode': '360406'},
                    {'xiaqu': '柴桑区', 'itemlevcode': '360421', 'xiaqucode': '360421'},
                    {'xiaqu': '武宁县', 'itemlevcode': '360423', 'xiaqucode': '360423'},
                    {'xiaqu': '修水县', 'itemlevcode': '360424', 'xiaqucode': '360424'},
                    {'xiaqu': '永修县', 'itemlevcode': '360425', 'xiaqucode': '360425'},
                    {'xiaqu': '德安县', 'itemlevcode': '360426', 'xiaqucode': '360426'},
                    {'xiaqu': '庐山市', 'itemlevcode': '360427', 'xiaqucode': '360427'},
                    {'xiaqu': '都昌县', 'itemlevcode': '360428', 'xiaqucode': '360428'},
                    {'xiaqu': '湖口县', 'itemlevcode': '360429', 'xiaqucode': '360429'},
                    {'xiaqu': '彭泽县', 'itemlevcode': '360430', 'xiaqucode': '360430'},
                    {'xiaqu': '共青城市', 'itemlevcode': '360471', 'xiaqucode': '360471'},
                    {'xiaqu': '瑞昌市', 'itemlevcode': '360481', 'xiaqucode': '360481'},
                    {'xiaqu': '庐山管理局', 'itemlevcode': '360491', 'xiaqucode': '360491'},
                    {'xiaqu': '新余市本级', 'itemlevcode': '360501', 'xiaqucode': '360501'},
                    {'xiaqu': '渝水区', 'itemlevcode': '360502', 'xiaqucode': '360502'},
                    {'xiaqu': '仙女湖区', 'itemlevcode': '360504', 'xiaqucode': '360504'},
                    {'xiaqu': '高新区', 'itemlevcode': '360505', 'xiaqucode': '360505'},
                    {'xiaqu': '孔目江区', 'itemlevcode': '360506', 'xiaqucode': '360506'},
                    {'xiaqu': '分宜县', 'itemlevcode': '360521', 'xiaqucode': '360521'},
                    {'xiaqu': '鹰潭市本级', 'itemlevcode': '360601', 'xiaqucode': '360601'},
                    {'xiaqu': '月湖区', 'itemlevcode': '360602', 'xiaqucode': '360602'},
                    {'xiaqu': '余江区', 'itemlevcode': '360622', 'xiaqucode': '360622'},
                    {'xiaqu': '贵溪市', 'itemlevcode': '360681', 'xiaqucode': '360681'},
                    {'xiaqu': '龙虎山风景旅游区', 'itemlevcode': '360682', 'xiaqucode': '360682'},
                    {'xiaqu': '高新区', 'itemlevcode': '360683', 'xiaqucode': '360683'},
                    {'xiaqu': '信江新区', 'itemlevcode': '360684', 'xiaqucode': '360684'},
                    {'xiaqu': '赣州市本级', 'itemlevcode': '360701', 'xiaqucode': '360701'},
                    {'xiaqu': '章贡区', 'itemlevcode': '360702', 'xiaqucode': '360702'},
                    {'xiaqu': '开发区', 'itemlevcode': '360703', 'xiaqucode': '360703'},
                    {'xiaqu': '赣县区', 'itemlevcode': '360721', 'xiaqucode': '360721'},
                    {'xiaqu': '信丰县', 'itemlevcode': '360722', 'xiaqucode': '360722'},
                    {'xiaqu': '大余县', 'itemlevcode': '360723', 'xiaqucode': '360723'},
                    {'xiaqu': '上犹县', 'itemlevcode': '360724', 'xiaqucode': '360724'},
                    {'xiaqu': '崇义县', 'itemlevcode': '360725', 'xiaqucode': '360725'},
                    {'xiaqu': '安远县', 'itemlevcode': '360726', 'xiaqucode': '360726'},
                    {'xiaqu': '龙南市', 'itemlevcode': '360727', 'xiaqucode': '360727'},
                    {'xiaqu': '定南县', 'itemlevcode': '360728', 'xiaqucode': '360728'},
                    {'xiaqu': '全南县', 'itemlevcode': '360729', 'xiaqucode': '360729'},
                    {'xiaqu': '宁都县', 'itemlevcode': '360730', 'xiaqucode': '360730'},
                    {'xiaqu': '于都县', 'itemlevcode': '360731', 'xiaqucode': '360731'},
                    {'xiaqu': '兴国县', 'itemlevcode': '360732', 'xiaqucode': '360732'},
                    {'xiaqu': '会昌县', 'itemlevcode': '360733', 'xiaqucode': '360733'},
                    {'xiaqu': '寻乌县', 'itemlevcode': '360734', 'xiaqucode': '360734'},
                    {'xiaqu': '石城县', 'itemlevcode': '360735', 'xiaqucode': '360735'},
                    {'xiaqu': '蓉江新区', 'itemlevcode': '360763', 'xiaqucode': '360763'},
                    {'xiaqu': '瑞金市', 'itemlevcode': '360781', 'xiaqucode': '360781'},
                    {'xiaqu': '南康区', 'itemlevcode': '360782', 'xiaqucode': '360782'},
                    {'xiaqu': '吉安市本级', 'itemlevcode': '360801', 'xiaqucode': '360801'},
                    {'xiaqu': '吉州区', 'itemlevcode': '360802', 'xiaqucode': '360802'},
                    {'xiaqu': '青原区', 'itemlevcode': '360803', 'xiaqucode': '360803'},
                    {'xiaqu': '经开区', 'itemlevcode': '360809', 'xiaqucode': '360809'},
                    {'xiaqu': '安福武功山风景名胜区', 'itemlevcode': '360812', 'xiaqucode': '360812'},
                    {'xiaqu': '吉安县', 'itemlevcode': '360821', 'xiaqucode': '360821'},
                    {'xiaqu': '吉水县', 'itemlevcode': '360822', 'xiaqucode': '360822'},
                    {'xiaqu': '峡江县', 'itemlevcode': '360823', 'xiaqucode': '360823'},
                    {'xiaqu': '新干县', 'itemlevcode': '360824', 'xiaqucode': '360824'},
                    {'xiaqu': '永丰县', 'itemlevcode': '360825', 'xiaqucode': '360825'},
                    {'xiaqu': '泰和县', 'itemlevcode': '360826', 'xiaqucode': '360826'},
                    {'xiaqu': '遂川县', 'itemlevcode': '360827', 'xiaqucode': '360827'},
                    {'xiaqu': '万安县', 'itemlevcode': '360828', 'xiaqucode': '360828'},
                    {'xiaqu': '安福县', 'itemlevcode': '360829', 'xiaqucode': '360829'},
                    {'xiaqu': '永新县', 'itemlevcode': '360830', 'xiaqucode': '360830'},
                    {'xiaqu': '井冈山市', 'itemlevcode': '360881', 'xiaqucode': '360881'},
                    {'xiaqu': '宜春市本级', 'itemlevcode': '360901', 'xiaqucode': '360901'},
                    {'xiaqu': '袁州区', 'itemlevcode': '360902', 'xiaqucode': '360902'},
                    {'xiaqu': '宜春市经济技术开发区', 'itemlevcode': '360903', 'xiaqucode': '360903'},
                    {'xiaqu': '宜阳新区', 'itemlevcode': '360904', 'xiaqucode': '360904'},
                    {'xiaqu': '明月山风景名胜区', 'itemlevcode': '360905', 'xiaqucode': '360905'},
                    {'xiaqu': '奉新县', 'itemlevcode': '360921', 'xiaqucode': '360921'},
                    {'xiaqu': '万载县', 'itemlevcode': '360922', 'xiaqucode': '360922'},
                    {'xiaqu': '上高县', 'itemlevcode': '360923', 'xiaqucode': '360923'},
                    {'xiaqu': '宜丰县', 'itemlevcode': '360924', 'xiaqucode': '360924'},
                    {'xiaqu': '靖安县', 'itemlevcode': '360925', 'xiaqucode': '360925'},
                    {'xiaqu': '铜鼓县', 'itemlevcode': '360926', 'xiaqucode': '360926'},
                    {'xiaqu': '丰城市', 'itemlevcode': '360981', 'xiaqucode': '360981'},
                    {'xiaqu': '樟树市', 'itemlevcode': '360982', 'xiaqucode': '360982'},
                    {'xiaqu': '高安市', 'itemlevcode': '360983', 'xiaqucode': '360983'},
                    {'xiaqu': '抚州市本级', 'itemlevcode': '361001', 'xiaqucode': '361001'},
                    {'xiaqu': '临川区', 'itemlevcode': '361002', 'xiaqucode': '361002'},
                    {'xiaqu': '南城县', 'itemlevcode': '361021', 'xiaqucode': '361021'},
                    {'xiaqu': '黎川县', 'itemlevcode': '361022', 'xiaqucode': '361022'},
                    {'xiaqu': '南丰县', 'itemlevcode': '361023', 'xiaqucode': '361023'},
                    {'xiaqu': '崇仁县', 'itemlevcode': '361024', 'xiaqucode': '361024'},
                    {'xiaqu': '乐安县', 'itemlevcode': '361025', 'xiaqucode': '361025'},
                    {'xiaqu': '宜黄县', 'itemlevcode': '361026', 'xiaqucode': '361026'},
                    {'xiaqu': '金溪县', 'itemlevcode': '361027', 'xiaqucode': '361027'},
                    {'xiaqu': '资溪县', 'itemlevcode': '361028', 'xiaqucode': '361028'},
                    {'xiaqu': '东乡区', 'itemlevcode': '361029', 'xiaqucode': '361029'},
                    {'xiaqu': '广昌县', 'itemlevcode': '361030', 'xiaqucode': '361030'},
                    {'xiaqu': '广昌县新农村建设招标办', 'itemlevcode': '361032', 'xiaqucode': '361032'},
                    {'xiaqu': '高新区', 'itemlevcode': '361061', 'xiaqucode': '361061'},
                    {'xiaqu': '东临新区', 'itemlevcode': '361062', 'xiaqucode': '361062'},
                    {'xiaqu': '上饶市本级', 'itemlevcode': '361101', 'xiaqucode': '361101'},
                    {'xiaqu': '信州区', 'itemlevcode': '361102', 'xiaqucode': '361102'},
                    {'xiaqu': '广信区', 'itemlevcode': '361121', 'xiaqucode': '361121'},
                    {'xiaqu': '广丰区', 'itemlevcode': '361122', 'xiaqucode': '361122'},
                    {'xiaqu': '玉山县', 'itemlevcode': '361123', 'xiaqucode': '361123'},
                    {'xiaqu': '铅山县', 'itemlevcode': '361124', 'xiaqucode': '361124'},
                    {'xiaqu': '横峰县', 'itemlevcode': '361125', 'xiaqucode': '361125'},
                    {'xiaqu': '弋阳县', 'itemlevcode': '361126', 'xiaqucode': '361126'},
                    {'xiaqu': '余干县', 'itemlevcode': '361127', 'xiaqucode': '361127'},
                    {'xiaqu': '鄱阳县', 'itemlevcode': '361128', 'xiaqucode': '361128'},
                    {'xiaqu': '万年县', 'itemlevcode': '361129', 'xiaqucode': '361129'},
                    {'xiaqu': '婺源县', 'itemlevcode': '361130', 'xiaqucode': '361130'},
                    {'xiaqu': '德兴市', 'itemlevcode': '361181', 'xiaqucode': '361181'},
                    {'xiaqu': '经济技术开发区', 'itemlevcode': '361182', 'xiaqucode': '361182'},
                    {'xiaqu': '三清山管理委员会', 'itemlevcode': '361183', 'xiaqucode': '361183'},
                    {'xiaqu': '上饶高铁经济试验区', 'itemlevcode': '361185', 'xiaqucode': '361185'},
                    {'xiaqu': '赣江新区本级', 'itemlevcode': '361201', 'xiaqucode': '361201'},
                    {'xiaqu': '临空组团', 'itemlevcode': '361202', 'xiaqucode': '361202'},
                    {'xiaqu': '经开组团', 'itemlevcode': '361203', 'xiaqucode': '361203'},
                    {'xiaqu': '桑海产业园', 'itemlevcode': '361204', 'xiaqucode': '361204'},
                    {'xiaqu': '赣江新区中医药科创城', 'itemlevcode': '361205', 'xiaqucode': '361205'}]
        projectcodelist = {'房建及市政工程_中标结果公示': '002001005', '重点工程_结果公示': '002004004', '其他项目_成交公示': '002013002',
                           '交通工程_中标公示': '002002005',
                           '水利工程_中标结果公示': '002003005', '政府采购_结果公示': '002006004'}

        for citycode in datalist:
            for projectname, projectcode in projectcodelist.items():
                data = {
                    "token": "",
                    "pn": 0,
                    "rn": 10000,
                    "sdt": "",
                    "edt": "",
                    "wd": "",
                    "inc_wd": "",
                    "exc_wd": "",
                    "fields": "",
                    "cnum": "",
                    "sort": "{\"webdate\":\"0\",\"id\":\"0\"}",
                    "ssort": "",
                    "cl": 10000,
                    "terminal": "",
                    "condition": [],
                    "time": [
                        {
                            "fieldName": "webdate",
                            "startTime": "2021-01-01 00:00:00",
                            "endTime": "2024-11-26 23:59:59"
                        }
                    ],
                    "highlights": "",
                    "statistics": None,
                    "unionCondition": [],
                    "accuracy": "",
                    "noParticiple": "1",
                    "searchRange": None,
                    "noWd": True
                }
                xiaquname = citycode["xiaqu"]
                code = citycode["xiaqucode"]
                city = city_list[code[:4]]
                condition = [
                    {
                        "fieldName": "categorynum",
                        "equal": projectcode,
                        "notEqual": None,
                        "equalList": None,
                        "notEqualList": None,
                        "isLike": True,
                        "likeType": 2
                    },
                    {
                        "fieldName": "xiaqucode",
                        "equal": code,
                        "notEqual": None,
                        "equalList": None,
                        "notEqualList": None,
                        "isLike": True,
                        "likeType": 2
                    }
                ]
                data = {**data, "condition": condition}
                data = json.dumps(data, separators=(',', ':'))

                yield scrapy.Request(
                    self.url, method='POST',
                    body=data,
                    callback=self.parse,
                    meta={"data": data, "xiaquname": xiaquname, "projectname": projectname, "city": city},
                )

    def parse(self, response: Response, **kwargs: Any) -> Any:

        data = response.json()["result"]["records"]
        # print(data)

        for res in data:
            meta = response.meta
            new_meta = {
                "title": res["titlenew"],
                "province": "江西省",
                "city": response.meta.get("city"),
                "region": response.meta.get("xiaquname"),
                "data_type": res["categoryname"],
                "get_date": res["webdate"],
            }
            meta.update(**new_meta)
            url = "https://www.jxsggzy.cn/" + res["linkurl"]
            # if url not in ['https://www.jxsggzy.cn//jyxx/002006/002006004/20230712/3273ec46-09e3-433e-9eeb-15f0fa31cefa.html']:
            #     continue
            yield scrapy.Request(
                url,
                callback=self.parse_detail,
                meta=meta
            )

    def parse_detail(self, response, **kwargs):

        title = response.xpath("//*[contains(@class, 'article-title')]/text()").get() or response.meta['title']
        if any([i in response.text for i in ['招标失败公告', '招标代理服务中标结果公告']]):
            return
        data_string_pro = re.sub(r"[\n\t\r\s]", "",
                                 "".join(response.xpath("/html/body/div[2]").xpath("//text()").getall()))
        try:
            data_string = self.del_html_tag(response.text)
        except:
            data_string = data_string_pro

        if any([i in data_string for i in ['招标失败公告']]):
            return
        # if '工期' not in data_string:
        #     return
        base_item = dict(
            source=self.source,
            province=self.province,
            city=response.meta["city"],
            region=response.meta.get("xiaquname"),
            data_type=self.get_data_type_by_title(title, response),
            source_url=response.url,
            get_date=response.meta["get_date"],
            title=title,
        )
        rules = {
            "project_date": [
                r"定标日期[:：为\s]+\s*([^\n]{3,100})",
                r"定标时间[:：为\s]+\s*([^\n]{3,100})",
                r"中标日期[:：为\s]+\s*([^\n]{3,100})",
                r"中标时间[:：为\s]+\s*([^\n]{3,100})",
                r"开标日期[:：为\s]+\s*([^\n]{3,100})",

            ],
            "review_names": [
                r"名单[:：为\s]+\s*([^\n]{3,100})",
                r"成员[:：为\s]+\s*([^\s]{3,100})"
            ],
            "register_num": [
                r"编号[:：为\s]+\s*([\(\)a-zA-Z\d-]{2,25})",
                r"编 号\s[:：为\s]\s+\s*([^\s]{3,100})"
            ],
            "project_name": [
                r"项目名称及标书编号[:：为]?\s*(.{2,100})\s*",
                r"项目名称及编号[:：为]?\s*(.{2,100})\s*",
                r"项目名称[:：为]?\s*(.{2,100})\s*",
                r"招标条件\s*(.{2,100})\s*已具备招标条件",
                r"本工程\s*(.{2,100})\s*已",
                r"工程名称\s*([^\s]{2,100})\s*",
                r"分包名称\s*([^\s]{2,100})\s*",
                r"组织的[:：为]?\s*(.{2,100})\s*"
            ],
            "budget_amount": [
                r"总预算金额[:：为]+\s*([^预算\n]{1,100})",
                r"招标控制价+\s*([^预算\n]{1,100})",
                r"成交金额[:：为]+\s*([^预算\n]{1,100})",
                r"中标价(万元)[:：为]+\s*([^预算\n]{1,100})",
                r"中标价[:：为]+\s*([^预算\n]{1,100})",
                r"中标金额[:：为]+\s*([^预算\n]{1,100})",
                r"预算金额[:：为]?\s*([^预算\n]{1,100})\s*",
                r"预算金额[:：为]?\s*([^预算]{1,100})\s*",
                r"估算价[:：为]?\s*([^预算\n]{1,100})\s*",
                r"投资额及来源[:：为]?\s*([^预算\n]{1,100})\s*",
                r"采购项目预算金额（元）[:：为]?\s*([^预算\n]{1,100})\s*",
                r"中标（成交）金额（元）\（%）[:：为]?\s*([^预算\n]{1,100})\s*",
                r"中标（成交）金额（元）\\（%）：\s*([^\n]{1,100})"
            ],
        }
        item = self.gen_item_with_reg(
            data_string,
            rules,
            base_item,
            need_check=["project_name"],
            html=response.text,
        )
        project_info_rules = {
            'project_name': [
                ['主要投标标的名称', "主要响应标的名称"],
                []
            ],
            'term': [
                ['服务期限'], []
            ],
            'people_num': [
                ['服务团队人数'], []
            ],
            'brand': [
                ['品牌'], []
            ],
            'num': [
                ['数量'], []
            ],
            'desc': [
                ['服务要求或者标的基本概况'], []
            ],
            'model': [
                ['规格型号'], []
            ],
            'price': [
                ['单价'], []
            ],
            'ar_name': [
                ['拟派项目经理'], []
            ],
        }
        for table in response.xpath("//table"):
            project_info = self.gen_item_with_table(table=[table], rules=project_info_rules, item={}, more=True)
            project_info = [i for i in project_info if i.get("project_name")]
            if project_info:
                item["project_info"] = project_info
                break
        # 拒绝的供应商
        project_refuse_info_rules = {
            'com_name': [
                ['投标人名称'],
                []
            ],
            'reason': [
                ['被拒绝原因'], []
            ],
            'detail': [
                ['招标文件相应拒绝条款'], []
            ],
        }
        for table in response.xpath("//table"):
            project_refuse_info = self.gen_item_with_table([table], project_refuse_info_rules, {}, more=True)
            project_refuse_info = [i for i in project_refuse_info if i.get("com_name")]
            if project_refuse_info:
                item["project_refuse_info"] = project_refuse_info
                break

        project_company_item_regs = {
            "com_name": [
                r"供应商名称[:：为]+\s*([^\s]{3,100})",
                # r"中标人[:：为]?\s*([^\s]{3,100})",
                r'供应商名称[:：]?([^\d在从，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'中签人名称[:：]?([^\d在从，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'中[签标]单位[名称]{0,2}[:：]?([^\d在从，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'中标[(（成交)）]{0,4}供应商名单[:：]?([^\d，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'[中成][选标交][信息人为名称：:（\s]+([^\d在从，。；：\:\&\,\.]{5,18}[司厂院所队])',
                r'[中成]\s*[选标交]\s*[信息人为名称：:（\s]+([^\d在从，。；：\:\&\,\.]{5,18}[司厂院所队])',
                r'中标[（(]成交[)）]单位[名称]{0,2}[:：]{0,1}([^\d在从，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'(?:[中成承][交标包][人单位供应服务商社会资本]{1,4}方?|[供应服务商]{3,5}|标段[一1])[、，名称为：:（]*([^\d，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'第一[中标（）成交]{0,6}候选人[名称]{0,2}[:：]?([^\d在从，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'成交候选人第一[:：]?([^\d在从，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'被选中单位[企业]{0,2}[名称]{0,2}[:：]?([^\d在从，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'[中标成交]{2}候选人[名称单为]{0,3}[:：]?([^\d在从，。；：\:\&\,\.]{5,20}[司厂院所队])',
                r'(?:排[序名]第[一1]的?[候侯选人单位]{2,3}|第[一1]的?拟?中[选标包][候侯选人排序名公司单位]{3,5}|第[一1]名|第[一1]排序人)[名称为：:（]*([^\d在从，。；：\:\&\,\.]{5,19}[司厂院所队])',
                r'通知书([^\d，。；：\:\&\,\.]{5,18}?[司厂院所队])[：:]',
                r'[确拟如评结抽审][论取定下核][1\.\.、排序第一是由，：:]*([^\d在从，。；：\:\&\,\.]{5,18}?[司院所队])',
                r'[联合体牵头人]{3}[名称为：:]*([^\d，。；：\:\&\,\.]{5,18}?[司厂院所队])',
                r'候选人.{0,5}1[\.\.、]([^\d在从，。；：\:\&\,\.]{5,18}?[司厂院所队])',
                r'[入中][选围]单位[信息名称]{1,4}[:：]?([^\d在从，。；：\:\&\,\.]{5,20}[司厂院所队])',
            ],
            "price": [
                r"中标.{1,6}金额[:：为]+\s*([^\n]{3,100})",
                r"中标价.{1,6}\s*([^\n]{3,100})",
                r"中标（成交）金额（元）\\（%）：\s*([^\n]{1,100})",
                r'/费率（%）\s*([\d\.零壹贰叁肆伍陆柒捌玖拾佰仟一二三四五六七八九十百￥千万人民币亿大¥写发包价元%‰率为()（）：,，:\s]+)',
                r'(?:[￥¥]|RMB)([0-9，：.万元:,]*)',
                r'中标金额（费率、单价等）([\d零壹贰叁肆伍陆柒捌玖拾佰仟十百￥千万人民币亿大¥写发包价元%‰率()（）.,，\s]+)',
                r'[中投成承分]\s*[选标交包]?总?\s*[价标报总选造金]\s*[格价额]为?[:：]?\s*([\d零壹贰叁肆伍陆柒捌玖拾佰仟十百￥千万人民币亿大¥写发包价元%‰率()（）.,，\s]+)',
                r'预成交价[:：]?\s*([\d\.零壹贰叁肆伍陆柒捌玖拾佰仟百￥千万人民币亿大¥写发包价元%‰率为()（）,.，\s]+)',
                r'公司\s*金额[:：]?\s*([\d零壹贰叁肆伍陆柒捌玖拾佰仟十百￥千万人民币亿大¥写发包价元%‰率为()（）.,，\s]+)',
                r'报价金额[:：]?\s*([\d\.零壹贰叁肆伍陆柒捌玖拾佰仟百￥千万人民币亿大¥写发包价元%‰率为()（）,.，\s]+)',
                r'中标（成交）(?:价|金额)[:：]?\s*([\d\.零壹贰叁肆伍陆柒捌玖拾佰仟百￥千万人民币亿大¥写发包价元%‰率为()（）,.，\s]+)',
                r'合同金额[:：]?\s*([\d\.零壹贰叁肆伍陆柒捌玖拾佰仟百￥千万人民币亿大¥写发包价元%‰率为()（）,.，\s]+)',
            ],
            'ar_name': [
                r'项目负责人（项目经理/项目总监）[:：]?\s*([' + XING + r']\w{1,2})',
                r'(?:项目|设计)(?:负责人|经理)(?:名称|姓名|为|是|)?(?:及证书编号)?[:：]?\s*([' + XING + r']\w{1,2})',
                r'总监理工程师(?:姓名)?[:：]?\s*([' + XING + r']\w{1,2})',
                r'项目负责人姓名及其(?:相关)?证书名称和编号[:：]?\s*([' + XING + r']\w{1,2})',
                r'项目经理姓名及资格证书号码[:：]?\s*([' + XING + r']\w{1,2})',
                r'项目经理姓名及资格证书号码[:：]?\s*([' + XING + r']\w{1,2})',
                r'项目负责人（项目经理）[:：]?\s*([' + XING + r']\w{1,2})',
                r'监理师[:：]?\s*([' + XING + r']\w{1,2})',
                r'建造师[:：]?\s*([' + XING + r']\w{1,2})',
                r'(?:项目负责人|项目经理)（建造师）[:：]?\s*([' + XING + r']\w{1,2})',
                r'项目负责人（项目经理/项目总监）[:：]?\s*([' + XING + r']\w{1,2})',
                r'项目总监(?:（项目经理/项目负责人）)?[:：]?\s*([' + XING + r']\w{1,2})',
                r'[^委员会][建目负][造经责总][师理人监].{0,20}姓[名为：:]\s*([^\d，。；：\:\&\,\./]{2,3})'],
            "address": [
                r"供应商地址[:：为]+\s*([^\s]{3,100})"
            ],
            "duration": [
                r'工期.?\n{0,5}?(\d+)',
                r'交货期/工期.?\n{0,5}?(\d+)',
            ],
        }

        project_company_item = self.gen_item_with_reg(
            data_string,
            project_company_item_regs,
            {},
            need_check=["com_name"],
            html=response.text,
        )
        if project_company_item.get("com_name"):
            item["project_company_info"] = [project_company_item]
        else:
            project_company_item_rules = {
                'com_name': [
                    ['中标人', '中标单位', '供应商', '成交单位', '成交供应商', '成交人', '单位名称', '中标候选',
                     '公司名称', '中标人名称', '中标供应商', '中标供应商名称', '中标候选人', '中标候选人名称',
                     '中标单位', '中标单位名称', '中标商名称',
                     '中标（成交）供应商名称', '中标（成交）候选人名称', '供应商名称', '入围供应商', '入围供应商名称',
                     '成交人', '成交供应商',
                     '成交供应商名称', '成交候选人名称', '成交候选供应商名称', '成交单位', '投标供应商', '投标单位',
                     '预成交供应商名称', '中标候选人名称',
                     '中标公司名称', '拟中标人(施工)', '中标人', '单位名称', '企业名称', '投标人名称',
                     '第一中标候选人'],
                    ['地址', '代码', '排名', '证书', '标的', '顺序', '标段', '情况']
                ],
                'price': [
                    ['总价', '元', '结果', '金额', '成交价', '标报价', '成交总额', '中标价', '价格', '成交报价',
                     '单价', '中标价格', '中标金额', '中标金额(元)', '中标金额（万元）', '中标金额（元）',
                     '中标金额（单位：人民币元）', '中标（成交）价格（元）',
                     '中标（成交）金额（元）', '成交价格', '成交金额', '成交金额(元)', '成交金额（元）', '投标报价',
                     '投标报价（元）', '报价(万元)', '报价(元)',
                     '报价/元', '报价（元）', '预成交金额(元)', '预算金额', '金额（元）', '中标金额(万元)', '中标价(元)',
                     '中标价', '中标价（元）', '最终报价',
                     '投标报价（单位：元）', '标的金额（元）', '中标价（万元）', '中标价', '投标价（元）', '投标报价(元)',
                     '中标价（万元） ', '中标价（万元）',
                     '中标价(万元)', '第一轮报价（元）', '投标报价（万元）', '报价', ], ['评', '审查']
                ],
                'candidate': [
                    ["候选人", "序号"], [""]
                ],
                'duration': [
                    ['工期', '工期（天）', ], []
                ],
                'ar_name': [
                    ['项目经理', '负责人', '姓名', '建造师名称', '项目负责人', '项目负责人及其建造师注册证书号',
                     '项目经理', '项目负责人及证号', '项目经理及证书号', '总监理工程师', '项目总监',
                     '项目负责人姓名及注册证书编号', '拟定项目经理姓名和注册证书编号', '拟定项目负责人姓名',
                     '拟定项目负责人姓名和注册证书编号', '拟定项目总监姓名和注册证书编号',
                     '拟定项目总监姓名和注册号', '姓名', ], ['号']
                ],
                'address': [
                    ['地址'], []
                ],
            }
            for table in response.xpath("//table"):
                project_company_info = self.gen_item_with_table([table], project_company_item_rules, {},
                                                                more=True)
                project_company_info = [i for i in project_company_info if i.get("com_name")]
                if project_company_info:
                    item["project_company_info"] = project_company_info
                    break

        print(item)
        yield NetProjectInfoItem(**item)


if __name__ == '__main__':
    from scrapy import cmdline

    cmdline.execute("scrapy crawl qg_jiangxi_project".split())
